// WebSocketServer.js
import mitt from 'mitt';
import ReconnectingWebSocket from 'reconnecting-websocket';

class WebSocketServer {
  constructor() {
    // 初始化 mitt 实例（事件总线核心）
    this.emitter = mitt();
    // 内部状态（可选）
    this.valid = false;
    this.webSocket = undefined;
    this.url = undefined;
    this.thread_id = undefined;
  }

  connect(url) {
    this.webSocket = new ReconnectingWebSocket(url);
    this.webSocket.addEventListener('open', () => {
      this.url = url;
      this.valid = true;
      this.emit('open', {});
    });
    this.webSocket.addEventListener('error', info => {
      this.emit('error', info);
    });
    this.webSocket.addEventListener('close', info => {
      this.emit('close', info);
    });
    this.webSocket.addEventListener('message', info => {
      this.emit('message', info);
    });
  }

  send(message) {
    if (!this.webSocket || !this.valid) {
      return;
    }
    if (typeof message !== 'string') {
      this.webSocket.send(JSON.stringify(message));
    } else {
      this.webSocket.send(message);
    }
  }

  // 监听事件（同 mitt 的 on）
  on(eventName, callback) {
    this.emitter.on(eventName, callback);
  }

  // 触发事件（同 mitt 的 emit）
  emit(eventName, ...args) {
    this.emitter.emit(eventName, ...args);
  }

  // 移除事件监听（同 mitt 的 off）
  off(eventName, callback) {
    this.emitter.off(eventName, callback);
  }

  // 清空所有事件监听（同 mitt 的 all.clear）
  clearAllEvents() {
    this.emitter.all.clear();
  }
}

// 导出单例实例（全局唯一）
export const webSocketServer = new WebSocketServer();
